unit settingDB_frm;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, ExtCtrls, EditBtn, ComCtrls, inifiles, datamodule_frm;

type

  { TSettingDB_frm }

  TSettingDB_frm = class(TForm)
    btSalva: TButton;
    cbProtocol: TComboBox;
    DirectoryEdit1: TDirectoryEdit;
    eddb: TLabeledEdit;
    edpw: TLabeledEdit;
    edserv: TLabeledEdit;
    edopenfile: TLabeledEdit;
    eduser: TLabeledEdit;
    Label1: TLabel;
    Label2: TLabel;
    edcopyfile: TLabeledEdit;
    PageControl1: TPageControl;
    TabDatabase: TTabSheet;
    TabArticoli: TTabSheet;
    TabComandiShell: TTabSheet;
    procedure btSalvaClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormShow(Sender: TObject);
    function GetValueIniFile(sezione,parametro:String;fileINI:AnsiString):String;

  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  SettingDB: TSettingDB_frm;

implementation

{ TSettingDB_frm }

procedure TSettingDB_frm.FormShow(Sender: TObject);
var PathIniFile: AnsiString;
begin
     PathIniFile := ProgramDirectory + 'settings.ini';

     edserv.Text:=GetValueIniFile('database','hostname',PathIniFile);
     eddb.Text:=GetValueIniFile('database','database',PathIniFile);
     eduser.Text:=GetValueIniFile('database','user',PathIniFile);
     edpw.Text:=GetValueIniFile('database','password',PathIniFile);
     cbProtocol.Text:=GetValueIniFile('database','protocollo',PathIniFile);
     DirectoryEdit1.Text:=GetValueIniFile('file','repository',PathIniFile);
     edopenfile.Text:=GetValueIniFile('file','openshell',PathIniFile);
     edcopyfile.Text:=GetValueIniFile('file','copyshell',PathIniFile);
end;

procedure TSettingDB_frm.btSalvaClick(Sender: TObject);
var settings:TIniFile;flagDatiOk:Boolean;
begin

       with DataModule1.ZConnection1 do
       begin
            Disconnect;
            Database:=eddb.Text;
            HostName:=edserv.Text;
            User:=eduser.Text;
            Password:=edpw.Text;
            try
               flagDatiOk:=true;
               Connect;
            except
                  flagDatiOk:=false;
                  Disconnect;
            end;
       end;

       if flagDatiOk then
       begin
            settings := TIniFile.Create(ProgramDirectory + 'settings.ini');
            with settings do
            begin
                 writeString('database','hostname',edserv.Text);
                 writeString('database','database',eddb.Text);
                 writeString('database','user',eduser.Text);
                 writeString('database','password',edpw.Text);
                 writeString('database','protocollo',cbProtocol.Text);
                 writeString('file','repository',DirectoryEdit1.Text);
                 writeString('file','openshell',edopenfile.Text);
                 writeString('file','copyshell',edcopyfile.Text);
            end;
            settings.Free;
            Close;

       end
       else
           ShowMessage('Non riesco a stabilire una connessione al database. Verifica i dati immessi.');
end;


procedure TSettingDB_frm.FormClose(Sender: TObject;
  var CloseAction: TCloseAction);
begin
   CloseAction:=caFree;
end;



//La funzione ritorna il valore del parametro del file ini richiesto.
//Se il parametro non esiste nel file ini, la funziona ritorna una stringa vuota.
//Questa funzione è stata realizzata per ovviare all'errore della funzione WriteString
//della classe TIniFile che, passando una stringa vuota ('') omette l'inserimento
//del parametro stesso nel file INI
function TSettingDB_frm.GetValueIniFile(sezione,parametro:String;fileINI:AnsiString):String;
var settings: TIniFile;
begin
     //Apro il file Ini
     settings := TIniFile.Create(fileINI);
     //Se il parametro indicato esiste ritorna il suo valore,
     //altrimenti ritorna una stringa vuota
     if settings.ValueExists(sezione,parametro) then
        GetValueIniFile:=settings.ReadString(sezione,parametro,'')
     else
        GetValueIniFile:='';
     //Libera la memoria assegnata all'istanza settings della classe TIniFile.
     settings.Free;
end;

initialization
   {$I settingDB_frm.lrs}

end.

